package com.dyylearn.servlet.request;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class HttpServletRequestMethods extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //这里我们使用request对象，获取表单提交的各种数据
        System.out.println("HttpServletRequestMethods doPost() 被调用...");

        /************************
         * 获取和http请求头相关的信息
         *************************/
        System.out.println("请求的资源路径URI=" + req.getRequestURI());
        System.out.println("请求的统一资源定位符（绝对路径）URL=" + req.getRequestURL());
        System.out.println("请求的客户端ip 地址= " + req.getRemoteAddr());//本地就是127.0.0.1
        //思考题：如发现某个ip在10s中，访问的次数超过100次，就封ip
        //实现思路：1用一个集合concurrentHashmap[ip：访问次数] 2[线程/定时扫描]3做成处理


        //获取http请求头的信息，可以指定其他，比如User-Agent，Host等待
        System.out.println("http请求头HOST=" + req.getHeader("Host"));
        //说明，如果我们希望得到请求的头和相关信息，可以使用request.getHeader("请求头字段")
        System.out.println("该请求的发起地址是= " + req.getHeader("Referer"));
        //请获取访问网站的浏览器是什么？
        String userAgent = req.getHeader("User-Agent");
        System.out.println("User-Agent= " + req.getHeader("User-Agent"));
        //取出Chrome/137.0.0.0
        String[] s = userAgent.split(" ");

        System.out.println("浏览器=" + s[s.length - 1].split("\\/")[0]);
        //获取 Cookie
        //JSESSIONID=10FBE9 F8226FFBF7473B7AE3F7E55177;
        String cookie = req.getHeader("cookie");
//        String id = req.getSession().getId();
        String[] JSESSIONID = cookie.split("=");
        System.out.println("取出JSESSIONID= " + JSESSIONID[1]);

        //主要是 Get / Post
        System.out.println("http请求方式=" + req.getMethod());

        /********************************************
         * 获取和请求参数相关信息，注意要求在返回数据前，获取参数
         *********************************************/
        //解决接收参数的中文乱码问题
        req.setCharacterEncoding("utf-8");

        //1.获取表单的数据[单个数据] username=11&pwd=11&hobby=kdy&hobby=tg
        String username = req.getParameter("username");
        String pwd = req.getParameter("pwd");
        //2.获取表单一组数据
        String[] hobbies = req.getParameterValues("hobby");
        System.out.println("username= " + username);
        System.out.println("pwd= " + pwd);
        for (String hobby : hobbies) {
            System.out.println("hobby=" + hobby);
        }
        //推而广之，如果是单选，下拉框等等。=>作业布置

        //返回接收到的信息，给浏览器回显
        //本质就是在http响应头，加上Content-Type: text/html;charset=utf-8
        //text/html 表示返回的数据类型，浏览器会根据这个类型来解析数据
        //text/plain 表示返回的数据，请浏览器使用文本方式解析
        resp.setContentType("text/html;charset=utf-8");
        //application/x-tar表示返回的是文件，浏览器就会以下载文件的方式处理
//        resp.setContentType("application/x-tar;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print("<h1>提交的用户名= " + username + "</h1>");
        writer.flush();
        writer.close();
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}
